{
  "openapi": "3.1.0",
  "info": {
    "title": "Open API",
    "description": "Удалённое управление профилями браузера и облачными средами выполнения MoreLogin через MoreLogin Open API.\n\n**Базовый URL**: `https://api.morelogin.com`\n\nOpen API управляет теми же профилями браузера, что и Local API, но не требует\nдесктопного клиента MoreLogin. Поскольку локальный клиент не задействован, Open API не может запустить браузер\nна вашей машине. Вместо этого он может запустить профиль как **облачную среду выполнения**, которая работает на\nинфраструктуре MoreLogin и управляется через Chrome DevTools Protocol (CDP).\n\n| Возможность | Local API | Open API |\n| --- | --- | --- |\n| Управление профилями, прокси, группами, метками | Да | Да |\n| Запуск браузера на вашей машине | Да | Нет |\n| Запуск браузера в облаке MoreLogin | Да | Да |\n\n**Кодирование ID**: ID в MoreLogin — это 64-битные целые числа на сервере, но в JSON они сериализуются как\nдесятичные строки, чтобы избежать потери точности в JavaScript. Отправляйте их как строки и читайте как строки.\n\nАутентификация использует bearer-токен OAuth2. Подробнее см.\n[Аутентификация](../Getting%20Started/authentication.md).\n",
    "version": "2026-09-05"
  },
  "servers": [
    {
      "url": "https://api.morelogin.com",
      "description": "Эндпоинт MoreLogin Open API"
    }
  ],
  "security": [
    {
      "OpenApiBearer": []
    }
  ],
  "tags": [
    {
      "name": "Profiles",
      "description": "Создание, обновление, запрос и удаление конфигураций профилей браузера."
    },
    {
      "name": "Cloud Runtime",
      "description": "Запуск, остановка, запрос и подключение профилей браузера, работающих в облаке MoreLogin."
    },
    {
      "name": "Fingerprint & Device Config",
      "description": "Версии ядер браузеров, user agent, разрешения, языки, часовые пояса и модели устройств."
    },
    {
      "name": "Cache",
      "description": "Очищает облачный кеш профиля."
    }
  ],
  "paths": {
    "/env/create/quick": {
      "post": {
        "summary": "Быстрое создание профиля браузера",
        "description": "Создаёт от 1 до 200 профилей браузера с одной общей конфигурацией.\n- **Предварительные условия**: в тарифе команды должно остаться достаточно профилей, а суточная квота создания не должна быть исчерпана. `isEncrypt=1` требует, чтобы у команды был настроен ключ шифрования. Firefox доступен только на Windows и macOS. `groupId` уже должен существовать, но если вместо него передать `groupName`, группа будет создана автоматически.\n- **Эффект**: вставляет профили, расходует ёмкость тарифа и увеличивает суточный счётчик создания. Передача данных подключения прокси также может создать запись прокси.\n- **Завершение**: синхронное. `data` содержит ID новых профилей в порядке создания.\n- **Повтор**: не идемпотентен, ключа идемпотентности нет. Вместо повтора подтвердите результат через `/env/page`.\n- **Open API**: информация о клиенте не читается, поэтому вы можете задать характеристики машины через `systemBitType` и `architecture`. Ядра берутся только из опубликованного набора. **Одновременные вызовы не сериализуются**, поэтому два параллельных запроса могут одновременно пройти проверку квоты.\n\nЗадокументированные бизнес-ошибки: `19002`, `19063`, `19064`, `19104`, `19106`, `19107`, `19108`, `19111`, `19112`, `14023`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "operationId": "quickCreateBrowserProfileOpenApi",
        "tags": [
          "Profiles"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuickCreateRequest"
              },
              "example": {
                "quantity": 1,
                "browserTypeId": 1,
                "operatorSystemId": 1,
                "groupName": "Marketing",
                "isEncrypt": 0,
                "browserCore": 0,
                "systemBitType": 1,
                "architecture": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiResponseBase"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "description": "ID созданных профилей в порядке создания.",
                          "items": {
                            "$ref": "#/components/schemas/EnvironmentId"
                          }
                        }
                      },
                      "required": [
                        "data"
                      ]
                    }
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    "1800000000000001"
                  ],
                  "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
                }
              }
            }
          }
        }
      }
    },
    "/env/create/advanced": {
      "post": {
        "summary": "Расширенное создание профиля браузера",
        "description": "Создаёт один профиль браузера с полной конфигурацией отпечатка.\n- **Предварительные условия**: те же проверки тарифа и суточной квоты, что и при быстром создании. Имя профиля должно быть уникальным в команде, координаты должны находиться вне материкового Китая, а `advancedSetting.ua` должен согласовываться с `uaVersion`. Если вы указываете `proxyId`, он уже должен существовать в команде.\n- **Эффект**: вставляет профиль, его учётные данные (зашифрованные при хранении) и конфигурацию после запуска; расходует ёмкость тарифа и суточный счётчик создания. Пользовательский URL платформы также создаёт запись сайта.\n- **Завершение**: синхронное. `data` содержит ID нового профиля.\n- **Повтор**: не идемпотентен. Второй вызов с тем же явно указанным `envName` не пройдёт проверку уникальности; без имени он создаст дубликат. Ключа идемпотентности нет. Не повторяйте слепо после таймаута: сначала запросите состояние.\n- **Open API**: ни операционная система, ни версия клиента не читаются; ядра берутся только из опубликованного набора. **Одновременные вызовы не сериализуются.**\n\nЗадокументированные бизнес-ошибки: `19001`, `19002`, `19004`, `19005`, `19063`, `19064`, `19100`, `19101`, `19102`, `19103`, `19104`, `19105`, `19106`, `19107`, `19108`, `19109`, `19110`, `19111`, `19112`, `19141`, `19175`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "operationId": "advancedCreateBrowserProfileOpenApi",
        "tags": [
          "Profiles"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdvancedCreateRequest"
              },
              "example": {
                "envName": "marketing-01",
                "browserTypeId": 1,
                "operatorSystemId": 1,
                "groupName": "Marketing",
                "isEncrypt": 0,
                "envRemark": "Created through the Open API",
                "uaVersion": 124,
                "browserCore": 124,
                "systemBitType": 1,
                "architecture": 0,
                "afterStartupConfig": {
                  "afterStartup": 2,
                  "autoOpenUrls": [
                    "https://example.com"
                  ],
                  "stayOnCheckIPPage": false
                },
                "startupParams": [
                  "--disable-notifications"
                ],
                "disableAudio": 0,
                "disableVideo": 0,
                "disableImg": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiResponseBase"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/EnvironmentId"
                        }
                      },
                      "required": [
                        "data"
                      ]
                    }
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": "1800000000000001",
                  "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
                }
              }
            }
          }
        }
      }
    },
    "/env/update": {
      "post": {
        "summary": "Изменить профиль браузера",
        "description": "Обновляет существующий профиль браузера. Изменяются только поля, присутствующие в запросе.\n- **Предварительные условия**: профиль должен существовать в команде. Профили со сквозным шифрованием обновить нельзя. Операционную систему и тип браузера изменить нельзя. Запущенный профиль обновить можно.\n- **Эффект**: записывает запись профиля, его расширенные настройки и cookie, а также объединяет расширенные настройки отпечатка (существующие значения сохраняются, если не перезаписаны).\n- **Завершение**: синхронное.\n- **Повтор**: безопасно повторять с тем же телом запроса. Учтите, что оптимистичной блокировки нет: при одновременных обновлениях одного профиля побеждает последняя запись, а объединение отпечатка сначала читает, потом записывает, поэтому параллельные вызовы могут потерять изменения.\n- **Open API**: когда ядро требуется подобрать заново, используется операционная система, уже сохранённая в профиле. Ни операционная система клиента, ни его версия не читаются.\n\nЗадокументированные бизнес-ошибки: `19001`, `19039`, `19104`, `19105`, `19106`, `19107`, `19108`, `19142`, `19159`, `19160`, `19175`, `19193`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "operationId": "updateBrowserProfileOpenApi",
        "tags": [
          "Profiles"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRequest"
              },
              "example": {
                "envId": "1800000000000001",
                "envName": "marketing-01-updated",
                "envRemark": "Updated through the Open API",
                "uaVersion": 124,
                "browserCore": 124,
                "systemBitType": 1,
                "architecture": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/VoidDataResponse"
          }
        }
      }
    },
    "/env/page": {
      "post": {
        "summary": "Получить список профилей браузера",
        "description": "Постранично выводит профили браузера, видимые аутентифицированному участнику.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Фильтрация**: `keyword` сопоставляется с именем профиля, примечанием, названием метки и названием группы. `groupId` равный `0` означает «без группы».\n- **Примечание**: пароли прокси не возвращаются обычным участникам, а также для платформенных и динамических прокси.\n- **Пагинация**: начинается с 1. Если результатов нет, `dataList` — пустой массив.",
        "operationId": "listBrowserProfilesOpenApi",
        "tags": [
          "Profiles"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EnvPageRequest"
              },
              "example": {
                "pageNo": 1,
                "pageSize": 10,
                "keyword": "marketing"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiResponseBase"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/EnvPageData"
                        }
                      },
                      "required": [
                        "data"
                      ]
                    }
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "total": "1",
                    "current": "1",
                    "pages": "1",
                    "dataList": [
                      {
                        "id": "1800000000000001",
                        "envName": "marketing-01",
                        "groupId": "0",
                        "groupName": "Marketing",
                        "tagInfos": [
                          {
                            "id": "1800000000000301",
                            "tagName": "important"
                          }
                        ],
                        "envRemark": "Created through the Open API",
                        "proxyId": "1800000000000101",
                        "proxy": {
                          "id": "1800000000000101",
                          "proxyName": "proxy-a",
                          "proxyType": 2,
                          "proxyProvider": 0,
                          "proxyCategoryType": 2,
                          "proxyCheckStatus": 1,
                          "proxyStatus": 0,
                          "state": "California",
                          "city": "Los Angeles",
                          "proxyPort": 1080,
                          "proxyIp": "127.0.0.1",
                          "exportIp": "203.0.113.10",
                          "countryCode": "US",
                          "expiryTime": "1786320000000",
                          "username": "user",
                          "password": "pass",
                          "refreshUrl": "https://example.com/refresh"
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/env/detail": {
      "post": {
        "summary": "Получить сведения о профиле браузера",
        "description": "Возвращает полную конфигурацию одного профиля браузера, включая расширенные настройки отпечатка и cookie.\n- **Предварительные условия**: профиль должен существовать в команде, а у вызывающего должны быть права на него.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Примечание**: пароли учётных записей и секреты двухфакторной аутентификации возвращаются только владельцу команды либо если профиль не настроен на их скрытие.",
        "operationId": "getBrowserProfileDetailOpenApi",
        "tags": [
          "Profiles"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EnvIdRequest"
              },
              "example": {
                "envId": "1800000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiResponseBase"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/EnvDetail"
                        }
                      },
                      "required": [
                        "data"
                      ]
                    }
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "id": "1800000000000001",
                    "envName": "marketing-01",
                    "browserTypeId": 1,
                    "operatorSystemId": 1,
                    "groupId": "0",
                    "groupName": "Marketing",
                    "tagIds": [
                      "1800000000000301"
                    ],
                    "tagInfos": [
                      {
                        "id": "1800000000000301",
                        "tagName": "important"
                      }
                    ],
                    "proxyId": "1800000000000101",
                    "isEncrypt": 0,
                    "envRemark": "Created through the Open API",
                    "uaVersion": 124,
                    "browserCore": 124,
                    "accountInfo": {
                      "username": "account@example.com",
                      "password": "secret",
                      "siteId": "1800000000000201",
                      "platformId": "9999",
                      "customerUrl": "https://example.com",
                      "otpSecret": "BASE32SECRET"
                    },
                    "isShowAccount": 0,
                    "afterStartupConfig": {
                      "afterStartup": 2,
                      "autoOpenUrls": [
                        "https://example.com"
                      ],
                      "platformUrl": "https://platform.example.com"
                    },
                    "startupParams": [
                      "--disable-notifications"
                    ],
                    "cookies": "[{\"name\":\"sid\",\"value\":\"abc\"}]",
                    "advancedSetting": {
                      "language": "en-US",
                      "timezone": "America/Los_Angeles"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/env/removeToRecycleBin/batch": {
      "post": {
        "summary": "Удалить профили браузера",
        "description": "Перемещает один или несколько профилей браузера в корзину.\n- **Предварительные условия**: профиль не должен уже находиться в корзине, не должен быть запущен и не должен находиться в процессе передачи. Сначала закройте браузер.\n- **Эффект**: это логическое удаление. Запись, отпечаток и облачный кеш сохраняются, а профиль помечается как перемещённый в корзину с отметкой времени. Ёмкость тарифа освобождается сразу, но суточный счётчик создания не возвращается.\n- **Завершение**: синхронное.\n- **Восстановление**: восстановление из корзины на поверхности API не предоставляется — используйте клиент MoreLogin или веб-консоль.\n- **Повтор**: повторный вызов сообщит, что профиль уже удалён; дважды удалить его нельзя.",
        "operationId": "batchRemoveBrowserProfilesOpenApi",
        "tags": [
          "Profiles"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envIds": {
                    "type": "array",
                    "description": "ID профилей для перемещения в корзину. Не может быть пустым.",
                    "minItems": 1,
                    "items": {
                      "$ref": "#/components/schemas/EnvironmentId"
                    }
                  }
                },
                "required": [
                  "envIds"
                ]
              },
              "example": {
                "envIds": [
                  "1800000000000001",
                  "1800000000000002"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/BooleanDataResponse"
          }
        }
      }
    },
    "/env/lock/query": {
      "post": {
        "summary": "Получить статус блокировки профиля браузера",
        "description": "Сообщает, занят ли профиль браузера в данный момент другим участником команды.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Семантика**: значение `true` требует выполнения всех условий: в команде включена функция блокировки безопасности, блокировка существует, и удерживает её кто-то, кроме вызывающего. Блокировка удерживается за участником и имеет срок истечения, поэтому может снять себя сама.",
        "operationId": "queryBrowserProfileLockOpenApi",
        "tags": [
          "Profiles"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EnvIdRequest"
              },
              "example": {
                "envId": "1800000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiResponseBase"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "object",
                          "properties": {
                            "envId": {
                              "$ref": "#/components/schemas/EnvironmentId"
                            },
                            "locked": {
                              "type": "boolean",
                              "description": "Заблокирован ли профиль другим участником.",
                              "example": false
                            }
                          }
                        }
                      },
                      "required": [
                        "data"
                      ]
                    }
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "envId": "1800000000000001",
                    "locked": false
                  }
                }
              }
            }
          }
        }
      }
    },
    "/env/setGroup/batch": {
      "post": {
        "summary": "Пакетно задать группу профилей",
        "description": "Перемещает профили браузера в группу по её названию.\n- **Предварительные условия**: укажите хотя бы одно из `envIds` или `uniqueIds`; `groupName` обязателен и не длиннее 50 символов. Убрать профиль из группы через этот эндпоинт невозможно.\n- **Эффект**: если названия не существует, группа создаётся автоматически, что **учитывается в лимите 1000 групп на команду** и приводит к ошибке после его достижения. Профиль принадлежит ровно одной группе, поэтому предыдущая группа заменяется. Если ваша команда выдаёт доступ по группам, созданная здесь группа также будет выдана вам.\n- **Завершение**: синхронное. Создание групп сериализуется по команде, поэтому одновременные вызовы с новым названием не создадут дубликатов.",
        "operationId": "batchSetBrowserProfileGroupOpenApi",
        "tags": [
          "Profiles"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EnvIdsOrUniqueIds"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "groupName": {
                        "type": "string",
                        "description": "Название целевой группы. Не может быть пустым.",
                        "minLength": 1,
                        "example": "Marketing"
                      }
                    },
                    "required": [
                      "groupName"
                    ]
                  }
                ]
              },
              "example": {
                "envIds": [
                  "1800000000000001"
                ],
                "groupName": "Marketing"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/BooleanDataResponse"
          }
        }
      }
    },
    "/env/setProxy/batch": {
      "post": {
        "summary": "Пакетно задать прокси профилей",
        "description": "Привязывает прокси к нескольким профилям браузера.\n- **Предварительные условия**: укажите хотя бы одно из `envIds` или `uniqueIds`. Если вы указываете `proxyId`, он уже должен существовать в команде, иначе вызов отклоняется, а не создаёт прокси.\n- **Эффект**: записывает `proxyId` в каждый профиль. Если `proxyId` опущен или равен `0`, повторно используется существующий прокси с полностью совпадающими данными подключения, а если совпадений нет, **в вызывающей команде создаётся новая запись прокси**.\n- **Завершение**: синхронное. Запущенные браузеры сохраняют тот прокси, с которым были запущены.\n- **Повтор**: повторная привязка того же `proxyId` идемпотентна, но повторение вызова с «сырыми» данными подключения может каждый раз создавать ещё одну запись прокси, когда дедупликация не срабатывает.\n\nЗадокументированные бизнес-ошибки: `19106`, `19193`, `14023`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "operationId": "batchSetBrowserProfileProxyOpenApi",
        "tags": [
          "Profiles"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EnvIdsOrUniqueIds"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "proxy": {
                        "$ref": "#/components/schemas/ProxyInput"
                      }
                    }
                  }
                ]
              },
              "example": {
                "envIds": [
                  "1800000000000001"
                ],
                "proxy": {
                  "proxyIp": "127.0.0.1",
                  "proxyPort": 1080,
                  "proxyType": 2,
                  "proxyProvider": 0,
                  "username": "user",
                  "password": "pass"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/BooleanDataResponse"
          }
        }
      }
    },
    "/env/setRemark/batch": {
      "post": {
        "summary": "Пакетно задать примечание профилей",
        "description": "Задаёт примечание для нескольких профилей браузера. Пустая строка очищает его.\n- **Предварительные условия**: укажите хотя бы одно из `envIds` или `uniqueIds`; у вызывающего должны быть права на каждый профиль.\n- **Эффект**: записывает только поле примечания.\n- **Завершение**: синхронное. Полностью идемпотентно при одинаковом теле запроса.",
        "operationId": "batchSetBrowserProfileRemarkOpenApi",
        "tags": [
          "Profiles"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EnvIdsOrUniqueIds"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "envRemark": {
                        "type": "string",
                        "description": "Примечание к профилю. Пустая строка удаляет примечание.",
                        "example": "Managed by automation"
                      }
                    },
                    "required": [
                      "envRemark"
                    ]
                  }
                ]
              },
              "example": {
                "envIds": [
                  "1800000000000001"
                ],
                "envRemark": "Managed by automation"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/BooleanDataResponse"
          }
        }
      }
    },
    "/cloudbrowser/start": {
      "post": {
        "summary": "Запустить облачную среду выполнения",
        "description": "Запускает профиль браузера как облачную среду выполнения.\n- **Предварительные условия**: профиль должен существовать в вашей команде и не должен быть зашифрован сквозным шифрованием или находиться в процессе передачи. **Прокси обязателен**, и его достижимость проверяется до принятия запуска. Ядро браузера должно поддерживаться облачным браузером, что исключает Firefox. Применяются командные лимиты на количество открытых сессий, а в развёртываниях с включённой тарификацией облачного браузера дополнительно проверяется баланс кредитов ИИ.\n- **Один запуск на профиль**: у участника может быть только один активный запуск на профиль. Когда команда включает блокировку безопасности, запуск другого участника блокирует ваш.\n- **Завершение**: **принято, но не завершено.** `data` пуст; среда выполнения готовится асинхронно. Опрашивайте `/cloudbrowser/page`, пока `cloudBrowserStatus` не станет `RUNNING`, затем вызовите `/cloudbrowser/connect` для получения `cdpUrl`. Запуск может быть принят и всё равно позже провалиться — это отражается на той же странице.\n- **Параллелизм**: одновременные запуски одного профиля сериализуются блокировкой; проигравший отклоняется, а не ставится в очередь.\n- **Повтор**: после таймаута читайте `/cloudbrowser/page` — не отправляйте запрос повторно.\n\nЗадокументированные бизнес-ошибки: `19039`, `19065`, `40001`, `40003`, `40015`, `40016`, `40021`, `40023`, `40024`, `40025`, `40026`, `40027`, `40028`, `40029`, `40037`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "operationId": "startCloudRuntimeOpenApi",
        "tags": [
          "Cloud Runtime"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudBrowserStartRequest"
              },
              "example": {
                "envId": "1800000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/VoidDataResponse"
          }
        }
      }
    },
    "/cloudbrowser/stop": {
      "post": {
        "summary": "Остановить облачную среду выполнения",
        "description": "Останавливает облачную среду выполнения, в которой работает профиль.\n- **Предварительные условия**: для этого профиля должен существовать активный запуск, начатый вами. Вызов в момент, когда среда уже остановлена или освобождается, возвращает успех и ничего не делает.\n- **Эффект**: прекращает начисление платы, закрывает учёт потребления, снимает блокировку профиля и просит клиент заархивировать профиль и cookie в облако до освобождения среды.\n- **Завершение**: **принято, но не завершено.** Опрашивайте `/cloudbrowser/page`, пока `cloudBrowserStatus` не станет `CLOSED`, а `cloudBrowserArchiveStatus` не достигнет `COMPLETED` или `FAILED`.\n- **Если архивация не удалась**: запуск остаётся тарифицируемым и по-прежнему отображается как `RUNNING`. `force` учитывается **только** в этом состоянии: он пропускает архивацию и освобождает среду, из-за чего изменения профиля в этой сессии теряются.\n- **Параллелизм**: одновременные остановки одного запуска сериализуются, поэтому дублирующий вызов безопасен.\n\nЗадокументированные бизнес-ошибки: `40002`, `40006`, `40008`, `40020`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "operationId": "stopCloudRuntimeOpenApi",
        "tags": [
          "Cloud Runtime"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudBrowserStopRequest"
              },
              "example": {
                "envId": "1800000000000001",
                "force": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/VoidDataResponse"
          }
        }
      }
    },
    "/cloudbrowser/page": {
      "post": {
        "summary": "Постраничный список облачных сред выполнения",
        "description": "Выводит профили браузера вместе со состоянием облачной среды выполнения для вызывающего участника.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Значения статуса**: `cloudBrowserStatus` может быть только `STARTING`, `RUNNING` или `CLOSED`. **`RUNNING` не означает, что браузер пригоден к работе**: среда, которая останавливается, архивируется или не смогла остановиться, тоже сообщается как `RUNNING`. Различить их помогает `cloudBrowserArchiveStatus` (`PENDING`, `ARCHIVING`, `COMPLETED`, `FAILED`), который равен null, когда активности нет.\n- **Согласованность**: разрешение среды выполнения работает по принципу «всё или ничего». Если его не удаётся выполнить для всей страницы, вызов завершается ошибкой, а не возвращает частичные данные.",
        "operationId": "pageCloudRuntimesOpenApi",
        "tags": [
          "Cloud Runtime"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudBrowserPageRequest"
              },
              "example": {
                "pageNo": 1,
                "pageSize": 10,
                "keyword": "marketing"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudBrowserPageResponse"
          }
        }
      }
    },
    "/cloudbrowser/connect": {
      "post": {
        "summary": "Подключиться к облачной среде выполнения",
        "description": "Возвращает данные подключения к запущенной облачной среде выполнения.\n- **Предварительные условия**: среда должна находиться строго в состоянии `RUNNING` и должна быть запущена вами. Среда, которая останавливается или архивируется, отклоняется, даже если `/cloudbrowser/page` по-прежнему сообщает `RUNNING`.\n- **Эффект**: выпускает новый токен доступа к рабочему столу и записывает вас как подключённого участника.\n- **Повторные вызовы**: возвращаемый `cdpUrl` стабилен, существующие CDP-сессии продолжают работать, но каждый вызов выпускает новый токен рабочего стола и перезаписывает записанного подключённого участника. **Прежние URL рабочего стола не отзываются**, поэтому считайте каждый возвращённый URL действующим секретом: не пишите его в логи и не сохраняйте.\n- **Ограничение сессии**: среда автоматически останавливается по достижении максимальной длительности, а архивация начинается незадолго до этого, поэтому долгоживущая автоматизация должна корректно переживать исчезновение среды.\n- **Применение**: подключите Puppeteer, Playwright или Selenium к `cdpUrl`.\n\nЗадокументированные бизнес-ошибки: `40008`, `40009`, `40010`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "operationId": "connectCloudRuntimeOpenApi",
        "tags": [
          "Cloud Runtime"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudBrowserConnectRequest"
              },
              "example": {
                "envId": "1800000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudBrowserConnectResponse"
          }
        }
      }
    },
    "/env/advanced/ua/versions": {
      "post": {
        "summary": "Получить список версий ядер браузеров",
        "description": "Возвращает опубликованные ядра браузеров и мажорные версии user agent.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Содержимое**: поверхность Open API возвращает только опубликованные ядра, тогда как поверхность Local API фильтрует их по версии запущенного клиента, поэтому две поверхности могут возвращать разные наборы. Список меняется по мере публикации новых ядер.\n- **Примечание**: сбой вышестоящей службы даёт пустой список, а не ошибку, поэтому считайте пустой результат неопределённым.\n- **Open API**: возвращаются только опубликованные ядра, независимо от какого-либо клиента.",
        "operationId": "listKernelVersionsOpenApi",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "systemType": {
                    "$ref": "#/components/schemas/OperatingSystem"
                  },
                  "systemBitType": {
                    "$ref": "#/components/schemas/SystemBitType"
                  },
                  "architecture": {
                    "$ref": "#/components/schemas/Architecture"
                  }
                }
              },
              "example": {
                "systemType": 1,
                "systemBitType": 1,
                "architecture": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiResponseBase"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "browserType": {
                                "$ref": "#/components/schemas/BrowserType"
                              },
                              "versions": {
                                "type": "array",
                                "description": "Опубликованные основные версии UA и ядра для этого типа браузера.",
                                "items": {
                                  "type": "integer"
                                },
                                "example": [
                                  124,
                                  123
                                ]
                              }
                            }
                          }
                        }
                      },
                      "required": [
                        "data"
                      ]
                    }
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": [
                    {
                      "browserType": 1,
                      "versions": [
                        124,
                        123
                      ]
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/env/advanced/ua/get": {
      "post": {
        "summary": "Получить user agent браузера",
        "description": "Генерирует user agent, соответствующий запрошенной операционной системе и производителю браузера.\n- **Предварительные условия**: Firefox допустим только с Windows или macOS, а `osVersion` должен быть одним из поддерживаемых выпусков.\n- **Эффект**: отсутствует, но **результат не детерминирован**: один и тот же запрос каждый раз возвращает другой user agent. Не используйте его как ключ кеша.\n- **Завершение**: синхронное. Повтор безопасен.\n- **Open API**: для сборки user agent используются только опубликованные ядра; информация о клиенте не читается.",
        "operationId": "getUserAgentOpenApi",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "os": {
                    "$ref": "#/components/schemas/OperatingSystem"
                  },
                  "osVersion": {
                    "type": "string",
                    "description": "Версия операционной системы. По умолчанию — пустая строка.\n",
                    "enum": [
                      "",
                      "Windows 7",
                      "Windows 8",
                      "Windows 10",
                      "Windows 11",
                      "macOS 12",
                      "macOS 13",
                      "macOS 14"
                    ],
                    "example": "Windows 11"
                  },
                  "vendor": {
                    "$ref": "#/components/schemas/BrowserType"
                  },
                  "mobileDevice": {
                    "type": "string",
                    "description": "ID модели мобильного устройства. Используется для профилей Android и iOS.",
                    "example": "pixel_8"
                  },
                  "systemBitType": {
                    "$ref": "#/components/schemas/SystemBitType"
                  },
                  "architecture": {
                    "$ref": "#/components/schemas/Architecture"
                  }
                },
                "required": [
                  "os",
                  "vendor"
                ]
              },
              "example": {
                "os": 1,
                "osVersion": "Windows 11",
                "vendor": 1,
                "systemBitType": 1,
                "architecture": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiResponseBase"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "object",
                          "properties": {
                            "ua": {
                              "type": "string",
                              "description": "Подобранный user agent.",
                              "example": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
                            },
                            "resolution": {
                              "$ref": "#/components/schemas/Resolution"
                            },
                            "mobileDevice": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "ID модели мобильного устройства. Для профилей для компьютера — пусто.",
                              "example": null
                            }
                          }
                        }
                      },
                      "required": [
                        "data"
                      ]
                    }
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
                    "resolution": {
                      "id": "1920_1080",
                      "value": "1920x1080"
                    },
                    "mobileDevice": null
                  }
                }
              }
            }
          }
        }
      }
    },
    "/env/base/resolution/list": {
      "post": {
        "summary": "Получить список разрешений экрана",
        "description": "Возвращает разрешения экрана, доступные для user agent или операционной системы.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Содержимое**: данные отдаёт служба базовых данных отпечатков, поэтому список меняется по мере обновления этих данных.",
        "operationId": "listResolutionsOpenApi",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ua": {
                    "type": "string",
                    "description": "User agent, используемый для подбора разрешений.",
                    "example": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
                  },
                  "os": {
                    "$ref": "#/components/schemas/OperatingSystem"
                  }
                }
              },
              "example": {
                "os": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. Возвращает пустой массив, если совпадений нет.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiResponseBase"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Resolution"
                          }
                        }
                      },
                      "required": [
                        "data"
                      ]
                    }
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": [
                    {
                      "id": "1920_1080",
                      "value": "1920x1080"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/env/base/list": {
      "post": {
        "summary": "Получить список часовых поясов и языков",
        "description": "Возвращает часовые пояса и языки, доступные для профилей браузера.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Примечание**: сейчас ответ не зависит от тела запроса: служба не передаёт запрошенные операционную систему и язык дальше, поэтому возвращается один и тот же список независимо от входных данных.",
        "operationId": "listTimezonesAndLanguagesOpenApi",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "os": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/OperatingSystem"
                      }
                    ],
                    "default": 1
                  }
                }
              },
              "example": {
                "os": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. Пустые списки возвращаются как пустые массивы.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiResponseBase"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "object",
                          "properties": {
                            "time_zone_list": {
                              "type": "array",
                              "items": {
                                "$ref": "#/components/schemas/IdValueOption"
                              }
                            },
                            "language_list": {
                              "type": "array",
                              "items": {
                                "$ref": "#/components/schemas/IdValueOption"
                              }
                            }
                          }
                        }
                      },
                      "required": [
                        "data"
                      ]
                    }
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "time_zone_list": [
                      {
                        "id": "America/Los_Angeles",
                        "value": "(GMT-08:00) America/Los_Angeles"
                      }
                    ],
                    "language_list": [
                      {
                        "id": "en-US",
                        "value": "English (United States)"
                      }
                    ]
                  },
                  "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
                }
              }
            }
          }
        }
      }
    },
    "/env/base/mobile/devices": {
      "post": {
        "summary": "Получить список моделей телефонов",
        "description": "Возвращает модели мобильных устройств, доступные для профилей браузера Android и iOS.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Содержимое**: пересечение таблицы устройств MoreLogin и службы базовых данных отпечатков. Модели, присутствующие только в одном из двух источников, опускаются, а возвращаемый `id` принадлежит службе отпечатков, а не таблице устройств.",
        "operationId": "listMobileDevicesOpenApi",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "responses": {
          "200": {
            "description": "Успех. Возвращает пустой массив, если моделей нет.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiResponseBase"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MobileDevice"
                          }
                        }
                      },
                      "required": [
                        "data"
                      ]
                    }
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": [
                    {
                      "id": "pixel_8",
                      "name": "Pixel 8",
                      "resolution": "1080x2400",
                      "os": 3,
                      "platform": "Android"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/env/fingerprint/refresh": {
      "post": {
        "summary": "Перегенерировать отпечаток профиля",
        "description": "Перегенерирует отпечаток профиля браузера.\n- **Предварительные условия**: укажите профиль через `envId` или `uniqueId`. Зашифрованные профили отклоняются. Запущенный профиль не блокируется, но новый отпечаток применяется со следующего запуска.\n- **Эффект**: генерирует новый отпечаток, случайным образом задаёт имя хоста и MAC-адрес и заново подбирает ядро браузера. Значения, явно указанные в запросе, имеют приоритет над сгенерированными.\n- **Завершение**: синхронное.\n- **Повтор**: **никогда не повторяйте автоматически.** Каждый вызов даёт другой случайный отпечаток, поэтому слепой повтор после таймаута изменит профиль во второй раз. Сначала сравните через `/env/detail`.\n- **Open API**: операционная система из запроса имеет приоритет; если она не указана, для выбора опубликованного ядра используется та, что сохранена в профиле. Информация о клиенте не читается.\n\nЗадокументированные бизнес-ошибки: `19039`, `19104`, `19105`, `19106`, `19107`, `19108`, `19111`, `19142`, `19193`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "operationId": "refreshFingerprintOpenApi",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envId": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/EnvironmentId"
                      }
                    ],
                    "description": "Идентификатор профиля. Укажите его или `uniqueId`."
                  },
                  "uniqueId": {
                    "type": "integer",
                    "format": "int32",
                    "description": "Порядковый номер профиля. Укажите его или `envId`.",
                    "example": 1001
                  },
                  "browserCore": {
                    "type": "integer",
                    "description": "Основная версия ядра. Значение `0` или его отсутствие означает автоматический подбор.",
                    "minimum": 0,
                    "example": 124
                  },
                  "uaVersion": {
                    "type": "integer",
                    "description": "Основная версия UA. Значение `0` или его отсутствие означает обновление по бизнес-правилам.",
                    "minimum": 0,
                    "example": 124
                  },
                  "browserTypeId": {
                    "$ref": "#/components/schemas/BrowserType"
                  },
                  "operatorSystemId": {
                    "$ref": "#/components/schemas/OperatingSystem"
                  },
                  "systemBitType": {
                    "$ref": "#/components/schemas/SystemBitType"
                  },
                  "architecture": {
                    "$ref": "#/components/schemas/Architecture"
                  },
                  "advancedSetting": {
                    "$ref": "#/components/schemas/AdvancedSetting"
                  }
                }
              },
              "example": {
                "envId": "1800000000000001",
                "browserCore": 124,
                "uaVersion": 124,
                "browserTypeId": 1,
                "operatorSystemId": 1,
                "systemBitType": 1,
                "architecture": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/VoidDataResponse"
          }
        }
      }
    },
    "/env/cache/cleanCloud": {
      "post": {
        "summary": "Очистить облачный кеш профиля",
        "description": "Очищает облачный кеш профиля браузера.\n- **Предварительные условия**: укажите профиль через `envId` или `uniqueId`, выберите хотя бы один класс кеша, и профиль не должен находиться в процессе передачи. Локальный кеш клиента не затрагивается.\n- **Эффект**: очистка общего класса удаляет облачные LocalStorage, IndexedDB и данные расширений, отвязывает расширения профиля и **сбрасывает тип шифрования профиля**; очистка cookie сбрасывает тип шифрования cookie. Оба изменения сохраняются, поэтому зашифрованный профиль становится незашифрованным для очищенного класса.\n- **Завершение**: синхронное — облачная служба хранения уже приняла запрос и ответила до возврата ответа. Идентификатора задачи для опроса нет.\n\nЗадокументированные бизнес-ошибки: `19039`, `19149`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "operationId": "cleanCloudCacheOpenApi",
        "tags": [
          "Cache"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envId": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/EnvironmentId"
                      }
                    ],
                    "description": "Идентификатор профиля. Укажите его или `uniqueId`."
                  },
                  "uniqueId": {
                    "type": "integer",
                    "format": "int32",
                    "description": "Порядковый номер профиля. Укажите его или `envId`.",
                    "minimum": 1,
                    "example": 1001
                  },
                  "others": {
                    "type": "boolean",
                    "description": "Очищать ли остальные облачные данные кэша.",
                    "example": true
                  },
                  "cookie": {
                    "type": "boolean",
                    "description": "Очищать ли облачные cookie.",
                    "example": false
                  }
                }
              },
              "example": {
                "envId": "1800000000000001",
                "others": true,
                "cookie": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/VoidDataResponse"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "OpenApiBearer": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Токен доступа OAuth2, полученный из `/oauth2/token`. Отправляйте его как `Authorization: Bearer <token>`.\nТокены истекают через 3600 секунд.\n"
      }
    },
    "schemas": {
      "OperatingSystem": {
        "type": "integer",
        "description": "Операционная система:\n- `1` — Windows\n- `2` — macOS\n- `3` — Android\n- `4` — iOS\n- `5` — Linux\n",
        "enum": [
          1,
          2,
          3,
          4,
          5
        ],
        "example": 1
      },
      "BrowserType": {
        "type": "integer",
        "description": "Тип браузера:\n- `1` — Chrome\n- `2` — Firefox\n",
        "enum": [
          1,
          2
        ],
        "example": 1
      },
      "SystemBitType": {
        "type": "integer",
        "description": "Разрядность системы. По умолчанию `1`:\n- `0` — 32 бита\n- `1` — 64 бита\n",
        "enum": [
          0,
          1
        ],
        "default": 1,
        "example": 1
      },
      "Architecture": {
        "type": "integer",
        "description": "Архитектура ЦП. По умолчанию `0`:\n- `0` — x86\n- `1` — ARM\n",
        "enum": [
          0,
          1
        ],
        "default": 0,
        "example": 0
      },
      "ToggleFlag": {
        "type": "integer",
        "description": "Значение переключателя:\n- `0` — выключено\n- `1` — включено\n",
        "enum": [
          0,
          1
        ],
        "example": 0
      },
      "ProxyType": {
        "type": "integer",
        "description": "Протокол прокси:\n- `0` — HTTP\n- `1` — HTTPS\n- `2` — SOCKS5\n- `3` — SSH\n",
        "enum": [
          0,
          1,
          2,
          3
        ],
        "example": 2
      },
      "ProxyProvider": {
        "type": "integer",
        "description": "Тип прокси. Значения от `0` до `3` означают обычный прокси соответствующего протокола; `4` и выше обозначают\nкоммерческого сервиса:\n- `0` — HTTP\n- `1` — HTTPS\n- `2` — SOCKS5\n- `3` — SSH\n- `4` — Oxylabs\n- `5` — Proxys.io\n- `6` — GeoSurf\n- `7` — Luminati\n- `8` — Lumauto\n- `9` — Oxylabsauto\n- `10` — Trojan\n- `11` — Shadowsocks\n- `12` — vmess\n- `13` — ABCProxy\n- `14` — LunaProxy\n- `15` — IPHTML\n- `16` — PiaProxy\n- `17` — 922S5\n- `18` — 360Proxy\n\nНеизвестные новые значения считайте обычным коммерческим сервисом.\n",
        "example": 0
      },
      "AdvancedSetting": {
        "type": "object",
        "description": "Динамическая конфигурация отпечатка. Ключи берутся из протокола расширенных настроек профиля;\nзначение может быть строкой, числом, логическим значением, массивом или объектом в зависимости от ключа.\n",
        "additionalProperties": true,
        "example": {
          "language": "en-US",
          "timezone": "America/Los_Angeles"
        }
      },
      "ProxyInput": {
        "type": "object",
        "description": "Данные подключения прокси. Если `proxyId` указывает на существующий прокси, используется он;\nиначе из этих полей создаётся новый прокси.\n",
        "properties": {
          "proxyId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "ID существующего прокси.",
            "example": "1800000000000101"
          },
          "proxyIp": {
            "type": "string",
            "description": "Хост или IP-адрес прокси.",
            "example": "127.0.0.1"
          },
          "proxyPort": {
            "type": "integer",
            "description": "Порт прокси.",
            "minimum": 1,
            "maximum": 65535,
            "example": 1080
          },
          "proxyName": {
            "type": "string",
            "description": "Название прокси.",
            "maxLength": 600,
            "example": "proxy-a"
          },
          "proxyType": {
            "$ref": "#/components/schemas/ProxyType"
          },
          "proxyProvider": {
            "$ref": "#/components/schemas/ProxyProvider"
          },
          "ipMonitor": {
            "type": "boolean",
            "description": "Отслеживать ли изменения исходящего IP.",
            "example": true
          },
          "ipChangeAction": {
            "type": "integer",
            "description": "Действие при изменении исходящего IP.",
            "example": 0
          },
          "username": {
            "type": "string",
            "description": "Имя пользователя прокси.",
            "maxLength": 200,
            "example": "user"
          },
          "password": {
            "type": "string",
            "description": "Пароль прокси.",
            "maxLength": 100,
            "example": "pass"
          },
          "refreshUrl": {
            "type": "string",
            "description": "URL обновления прокси.",
            "example": "https://example.com/refresh"
          },
          "encryptionType": {
            "type": "integer",
            "description": "Тип шифрования прокси.",
            "example": 0
          },
          "country": {
            "type": "string",
            "description": "Страна или регион.",
            "example": "US"
          },
          "state": {
            "type": "string",
            "description": "Область или регион.",
            "example": "CA"
          },
          "city": {
            "type": "string",
            "description": "Город.",
            "example": "Los Angeles"
          }
        }
      },
      "AccountInfo": {
        "type": "object",
        "description": "Аккаунт платформы, привязанный к профилю.",
        "properties": {
          "username": {
            "type": "string",
            "description": "Имя пользователя аккаунта платформы.",
            "maxLength": 64,
            "example": "account@example.com"
          },
          "password": {
            "type": "string",
            "description": "Пароль аккаунта платформы.",
            "maxLength": 50,
            "example": "secret"
          },
          "siteId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "ID сайта.",
            "example": "1800000000000201"
          },
          "platformId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "ID платформы. `9999` означает пользовательскую платформу.",
            "example": "9999"
          },
          "customerUrl": {
            "type": "string",
            "description": "Пользовательский URL платформы. Обязателен, когда `platformId` равен `9999`. Должен быть корректным URL.",
            "example": "https://example.com"
          },
          "otpSecret": {
            "type": "string",
            "description": "Секрет двухфакторной аутентификации (2FA).",
            "example": "BASE32SECRET"
          }
        },
        "required": [
          "platformId"
        ]
      },
      "AfterStartupConfigInput": {
        "type": "object",
        "description": "Поведение после запуска браузера.",
        "properties": {
          "afterStartup": {
            "type": "integer",
            "description": "Поведение при запуске. По умолчанию `1`:\n- `1` — снова открыть страницы прошлой сессии\n- `2` — открыть указанные страницы\n- `3` — открыть указанные страницы и платформу\n- `4` — снова открыть страницы прошлой сессии и платформу\n",
            "enum": [
              1,
              2,
              3,
              4
            ],
            "default": 1,
            "example": 2
          },
          "autoOpenUrls": {
            "type": "array",
            "description": "Страницы, которые нужно открыть автоматически. Каждый элемент должен быть корректным URL.",
            "items": {
              "type": "string"
            },
            "example": [
              "https://example.com"
            ]
          },
          "stayOnCheckIPPage": {
            "type": "boolean",
            "description": "Оставаться ли на странице проверки IP после запуска.",
            "example": false
          }
        }
      },
      "AfterStartupConfigDetail": {
        "type": "object",
        "description": "Поведение после запуска браузера в том виде, в каком оно сохранено в профиле.",
        "properties": {
          "afterStartup": {
            "type": "integer",
            "description": "Поведение при запуске. От `1` до `4`.",
            "enum": [
              1,
              2,
              3,
              4
            ],
            "example": 2
          },
          "autoOpenUrls": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "https://example.com"
            ]
          },
          "platformUrl": {
            "type": [
              "string",
              "null"
            ],
            "description": "URL платформы, открываемый после запуска.",
            "example": "https://platform.example.com"
          }
        }
      },
      "TagInfo": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Идентификатор тега.",
            "example": "1800000000000301"
          },
          "tagName": {
            "type": "string",
            "description": "Название тега.",
            "example": "important"
          }
        }
      },
      "ProxyInfoDetail": {
        "type": "object",
        "description": "Прокси, привязанный к профилю в данный момент.",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "ID прокси.",
            "example": "1800000000000101"
          },
          "proxyName": {
            "type": "string",
            "description": "Название прокси.",
            "example": "proxy-a"
          },
          "proxyType": {
            "$ref": "#/components/schemas/ProxyType"
          },
          "proxyProvider": {
            "$ref": "#/components/schemas/ProxyProvider"
          },
          "proxyCategoryType": {
            "type": "integer",
            "description": "Категория прокси:\n- `1` — облачная платформа\n- `2` — собственный IP\n",
            "enum": [
              1,
              2
            ],
            "example": 2
          },
          "proxyCheckStatus": {
            "type": "integer",
            "description": "Статус проверки подключения:\n- `0` — ожидание\n- `1` — успешно\n- `2` — ошибка\n- `3` — неизвестная ошибка\n",
            "enum": [
              0,
              1,
              2,
              3
            ],
            "example": 1
          },
          "proxyStatus": {
            "type": "integer",
            "description": "Статус прокси:\n- `0` — норма\n- `1` — ожидает выделения\n- `2` — обновляется\n- `3` — истёк\n",
            "enum": [
              0,
              1,
              2,
              3
            ],
            "example": 0
          },
          "state": {
            "type": [
              "string",
              "null"
            ],
            "description": "Штат или область прокси. Приоритет у определённого местоположения выходного IP, затем используется настроенное; возможны null или пустая строка.",
            "example": "California"
          },
          "city": {
            "type": [
              "string",
              "null"
            ],
            "description": "Город прокси. Приоритет у определённого местоположения выходного IP, затем используется настроенное; возможны null или пустая строка.",
            "example": "Los Angeles"
          },
          "proxyPort": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "description": "Порт подключения к прокси; не определяется по имени прокси. Может быть null, если недоступен.",
            "example": 1080
          },
          "proxyIp": {
            "type": "string",
            "description": "Хост или IP-адрес прокси.",
            "example": "127.0.0.1"
          },
          "exportIp": {
            "type": [
              "string",
              "null"
            ],
            "description": "Исходящий IP-адрес.",
            "example": "203.0.113.10"
          },
          "countryCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "Код страны.",
            "example": "US"
          },
          "expiryTime": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^\\d+$",
            "description": "Срок истечения как метка времени Unix в миллисекундах.",
            "example": "1786320000000"
          },
          "username": {
            "type": [
              "string",
              "null"
            ],
            "description": "Имя пользователя прокси.",
            "example": "user"
          },
          "password": {
            "type": [
              "string",
              "null"
            ],
            "description": "Пароль прокси.",
            "example": "pass"
          },
          "refreshUrl": {
            "type": [
              "string",
              "null"
            ],
            "description": "URL обновления прокси.",
            "example": "https://example.com/refresh"
          }
        }
      },
      "Resolution": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID разрешения экрана.",
            "example": "1920_1080"
          },
          "value": {
            "type": "string",
            "description": "Отображаемое значение.",
            "example": "1920x1080"
          }
        }
      },
      "IdValueOption": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID варианта.",
            "example": "en-US"
          },
          "value": {
            "type": "string",
            "description": "Отображаемое значение.",
            "example": "English (United States)"
          }
        }
      },
      "MobileDevice": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID модели устройства.",
            "example": "pixel_8"
          },
          "name": {
            "type": "string",
            "description": "Название модели устройства.",
            "example": "Pixel 8"
          },
          "resolution": {
            "type": "string",
            "description": "Разрешение устройства.",
            "example": "1080x2400"
          },
          "os": {
            "type": "integer",
            "description": "Операционная система:\n- `3` — Android\n- `4` — iOS\n",
            "enum": [
              3,
              4
            ],
            "example": 3
          },
          "platform": {
            "type": "string",
            "description": "Название платформы.",
            "example": "Android"
          }
        }
      },
      "EnvIdRequest": {
        "type": "object",
        "properties": {
          "envId": {
            "$ref": "#/components/schemas/EnvironmentId"
          }
        },
        "required": [
          "envId"
        ]
      },
      "EnvIdsOrUniqueIds": {
        "type": "object",
        "description": "Целевые профили. Укажите хотя бы одно из `envIds` или `uniqueIds`.",
        "properties": {
          "envIds": {
            "type": "array",
            "description": "ID профилей.",
            "items": {
              "$ref": "#/components/schemas/EnvironmentId"
            }
          },
          "uniqueIds": {
            "type": "array",
            "description": "Порядковые номера профилей.",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "example": [
              1001
            ]
          }
        }
      },
      "QuickCreateRequest": {
        "type": "object",
        "properties": {
          "quantity": {
            "type": "integer",
            "description": "Количество создаваемых профилей.",
            "minimum": 1,
            "maximum": 200,
            "example": 1
          },
          "browserTypeId": {
            "$ref": "#/components/schemas/BrowserType"
          },
          "operatorSystemId": {
            "$ref": "#/components/schemas/OperatingSystem"
          },
          "groupId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Идентификатор существующей группы. `0` означает «без группы».",
            "example": "0"
          },
          "groupName": {
            "type": "string",
            "description": "Название группы. Если оно указано, группа находится или создаётся автоматически.\n",
            "maxLength": 50,
            "example": "Marketing"
          },
          "isEncrypt": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToggleFlag"
              }
            ],
            "description": "Шифровать ли профиль. По умолчанию `0`:\n- `0` — без шифрования\n- `1` — с шифрованием\n"
          },
          "browserCore": {
            "type": "integer",
            "description": "Основная версия ядра. По умолчанию `0` — публикованное ядро выбирается автоматически.",
            "minimum": 0,
            "example": 0
          },
          "systemBitType": {
            "$ref": "#/components/schemas/SystemBitType"
          },
          "architecture": {
            "$ref": "#/components/schemas/Architecture"
          },
          "proxy": {
            "$ref": "#/components/schemas/ProxyInput"
          }
        },
        "required": [
          "quantity",
          "browserTypeId",
          "operatorSystemId"
        ]
      },
      "AdvancedCreateRequest": {
        "type": "object",
        "properties": {
          "envName": {
            "type": "string",
            "description": "Имя профиля.",
            "maxLength": 100,
            "example": "marketing-01"
          },
          "browserTypeId": {
            "$ref": "#/components/schemas/BrowserType"
          },
          "operatorSystemId": {
            "$ref": "#/components/schemas/OperatingSystem"
          },
          "groupId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Идентификатор существующей группы. `0` означает «без группы».",
            "example": "0"
          },
          "groupName": {
            "type": "string",
            "description": "Название группы. При передаче группа находится или создаётся автоматически.",
            "maxLength": 50,
            "example": "Marketing"
          },
          "tagIds": {
            "type": "array",
            "description": "ID меток. Пустой массив означает отсутствие меток.",
            "items": {
              "type": "string",
              "pattern": "^\\d+$"
            },
            "example": [
              "1800000000000301"
            ]
          },
          "proxyId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Идентификатор существующего прокси. `0` означает «без прокси».",
            "example": "0"
          },
          "proxy": {
            "$ref": "#/components/schemas/ProxyInput"
          },
          "isEncrypt": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToggleFlag"
              }
            ],
            "description": "Шифровать ли профиль. По умолчанию `0`."
          },
          "envRemark": {
            "type": "string",
            "description": "Примечание профиля.",
            "maxLength": 1500,
            "example": "Created through the Open API"
          },
          "uaVersion": {
            "type": "integer",
            "description": "Мажорная версия UA. По умолчанию `0` — любая.",
            "minimum": 0,
            "example": 124
          },
          "browserCore": {
            "type": "integer",
            "description": "Основная версия ядра. По умолчанию `0` — публикованное ядро выбирается автоматически.",
            "minimum": 0,
            "example": 124
          },
          "systemBitType": {
            "$ref": "#/components/schemas/SystemBitType"
          },
          "architecture": {
            "$ref": "#/components/schemas/Architecture"
          },
          "accountInfo": {
            "$ref": "#/components/schemas/AccountInfo"
          },
          "isShowAccount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToggleFlag"
              }
            ],
            "description": "Переключатель защиты паролем."
          },
          "afterStartupConfig": {
            "$ref": "#/components/schemas/AfterStartupConfigInput"
          },
          "startupParams": {
            "type": "array",
            "description": "Параметры запуска браузера.",
            "items": {
              "type": "string"
            },
            "example": [
              "--disable-notifications"
            ]
          },
          "cookies": {
            "type": "string",
            "description": "Cookie в виде текста JSON.",
            "example": "[{\"name\":\"sid\",\"value\":\"abc\"}]"
          },
          "advancedSetting": {
            "$ref": "#/components/schemas/AdvancedSetting"
          },
          "disableAudio": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToggleFlag"
              }
            ],
            "description": "Блокировать ли воспроизведение звука."
          },
          "disableVideo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToggleFlag"
              }
            ],
            "description": "Блокировать ли загрузку видео."
          },
          "disableImg": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToggleFlag"
              }
            ],
            "description": "Блокировать ли загрузку изображений."
          },
          "imgLimitSize": {
            "type": "integer",
            "description": "Максимальный размер загружаемого изображения, КБ.",
            "minimum": 0,
            "maximum": 100000,
            "example": 1000
          }
        },
        "required": [
          "browserTypeId",
          "operatorSystemId"
        ]
      },
      "UpdateRequest": {
        "type": "object",
        "properties": {
          "envId": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnvironmentId"
              }
            ],
            "description": "Идентификатор профиля. Запрос также принимает псевдоним поля `id`."
          },
          "envName": {
            "type": "string",
            "description": "Имя профиля.",
            "maxLength": 100,
            "example": "marketing-01-updated"
          },
          "groupId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Идентификатор группы. `0` означает «без группы».",
            "example": "0"
          },
          "groupName": {
            "type": "string",
            "description": "Название группы. При передаче группа находится или создаётся автоматически.",
            "maxLength": 50,
            "example": "Marketing"
          },
          "tagIds": {
            "type": "array",
            "description": "Идентификаторы тегов.",
            "items": {
              "type": "string",
              "pattern": "^\\d+$"
            },
            "example": [
              "1800000000000301"
            ]
          },
          "proxyId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Идентификатор существующего прокси. `0` означает «без прокси».",
            "example": "0"
          },
          "envRemark": {
            "type": "string",
            "description": "Примечание профиля.",
            "maxLength": 1500,
            "example": "Updated through the Open API"
          },
          "uaVersion": {
            "type": "integer",
            "description": "Основная версия UA.",
            "minimum": 0,
            "example": 124
          },
          "browserCore": {
            "type": "integer",
            "description": "Основная версия ядра.",
            "minimum": 0,
            "example": 124
          },
          "systemBitType": {
            "$ref": "#/components/schemas/SystemBitType"
          },
          "architecture": {
            "$ref": "#/components/schemas/Architecture"
          },
          "accountInfo": {
            "$ref": "#/components/schemas/AccountInfo"
          },
          "isShowAccount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToggleFlag"
              }
            ],
            "description": "Переключатель защиты паролем."
          },
          "afterStartupConfig": {
            "$ref": "#/components/schemas/AfterStartupConfigInput"
          },
          "startupParams": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "--disable-notifications"
            ]
          },
          "cookies": {
            "type": "string",
            "description": "Cookie в виде текста JSON.",
            "example": "[{\"name\":\"sid\",\"value\":\"abc\"}]"
          },
          "advancedSetting": {
            "$ref": "#/components/schemas/AdvancedSetting"
          },
          "disableAudio": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToggleFlag"
              }
            ],
            "description": "Блокировать ли воспроизведение звука."
          },
          "disableVideo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToggleFlag"
              }
            ],
            "description": "Блокировать ли загрузку видео."
          },
          "disableImg": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToggleFlag"
              }
            ],
            "description": "Блокировать ли загрузку изображений."
          },
          "imgLimitSize": {
            "type": "integer",
            "description": "Максимальный размер загружаемого изображения, КБ.",
            "minimum": 0,
            "maximum": 100000,
            "example": 1000
          },
          "hostnameSource": {
            "type": "integer",
            "description": "Источник имени устройства:\n- `0` — пользовательское\n- `1` — реальное\n",
            "enum": [
              0,
              1
            ],
            "example": 0
          },
          "hostname": {
            "type": "string",
            "description": "Имя устройства. Используется, когда `hostnameSource` равен `0`.",
            "example": "DESKTOP-OPENAPI"
          },
          "macAddressSource": {
            "type": "integer",
            "description": "Источник MAC-адреса:\n- `0` — пользовательский\n- `1` — реальный\n",
            "enum": [
              0,
              1
            ],
            "example": 0
          },
          "macAddress": {
            "type": "string",
            "description": "MAC-адрес. Используется, когда `macAddressSource` равен `0`.",
            "example": "00:16:3E:12:34:56"
          }
        },
        "required": [
          "envId"
        ]
      },
      "EnvPageRequest": {
        "type": "object",
        "properties": {
          "uniqueIds": {
            "type": "array",
            "description": "Порядковые номера профилей. До 100 элементов.",
            "maxItems": 100,
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "example": [
              1001
            ]
          },
          "envId": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnvironmentId"
              }
            ],
            "description": "Идентификатор профиля. Запрос также принимает псевдоним поля `id`."
          },
          "envName": {
            "type": "string",
            "description": "Имя профиля.",
            "example": "marketing-01"
          },
          "keyword": {
            "type": "string",
            "description": "Фильтр по ключевому слову. Сопоставляется с названием профиля, названием группы, названием метки и примечанием.",
            "example": "marketing"
          },
          "groupId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Идентификатор группы. `0` означает «без группы».",
            "example": "0"
          },
          "pageSize": {
            "type": "integer",
            "format": "int64",
            "description": "Количество элементов на странице.",
            "minimum": 1,
            "maximum": 100,
            "default": 10,
            "example": 10
          },
          "pageNo": {
            "type": "integer",
            "format": "int64",
            "description": "Номер текущей страницы, начиная с 1.",
            "minimum": 1,
            "default": 1,
            "example": 1
          },
          "onlyMainAccount": {
            "type": "boolean",
            "description": "Возвращать ли только профили, принадлежащие главному аккаунту.",
            "example": false
          }
        },
        "required": [
          "pageNo",
          "pageSize"
        ]
      },
      "EnvListItem": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/EnvironmentId"
          },
          "envName": {
            "type": "string",
            "description": "Имя профиля.",
            "example": "marketing-01"
          },
          "groupId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Идентификатор группы. `0` означает «без группы».",
            "example": "0"
          },
          "groupName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Название группы.",
            "example": "Marketing"
          },
          "tagInfos": {
            "type": "array",
            "description": "Теги профиля. Пустой массив, если их нет.",
            "items": {
              "$ref": "#/components/schemas/TagInfo"
            }
          },
          "envRemark": {
            "type": [
              "string",
              "null"
            ],
            "description": "Примечание профиля.",
            "example": "Created through the Open API"
          },
          "proxyId": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^\\d+$",
            "description": "Идентификатор прокси, привязанного к профилю.",
            "example": "1800000000000101"
          },
          "proxy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ProxyInfoDetail"
              },
              {
                "type": "null"
              }
            ],
            "description": "Данные прокси. `null`, если прокси не привязан."
          }
        }
      },
      "EnvPageData": {
        "type": "object",
        "properties": {
          "total": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Общее количество записей.",
            "example": "1"
          },
          "current": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Номер текущей страницы.",
            "example": "1"
          },
          "pages": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Общее количество страниц.",
            "example": "1"
          },
          "dataList": {
            "type": "array",
            "description": "Профили на текущей странице. Пустой массив, если результатов нет.",
            "items": {
              "$ref": "#/components/schemas/EnvListItem"
            }
          }
        },
        "required": [
          "total",
          "current",
          "pages",
          "dataList"
        ]
      },
      "EnvDetail": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/EnvironmentId"
          },
          "envName": {
            "type": "string",
            "description": "Имя профиля.",
            "example": "marketing-01"
          },
          "browserTypeId": {
            "$ref": "#/components/schemas/BrowserType"
          },
          "operatorSystemId": {
            "$ref": "#/components/schemas/OperatingSystem"
          },
          "groupId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Идентификатор группы. `0` означает «без группы».",
            "example": "0"
          },
          "groupName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Название группы.",
            "example": "Marketing"
          },
          "tagIds": {
            "type": "array",
            "description": "Идентификаторы тегов.",
            "items": {
              "type": "string",
              "pattern": "^\\d+$"
            },
            "example": [
              "1800000000000301"
            ]
          },
          "tagInfos": {
            "type": "array",
            "description": "Теги профиля. Пустой массив, если их нет.",
            "items": {
              "$ref": "#/components/schemas/TagInfo"
            }
          },
          "proxyId": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^\\d+$",
            "description": "Идентификатор прокси, привязанного к профилю.",
            "example": "1800000000000101"
          },
          "isEncrypt": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToggleFlag"
              }
            ],
            "description": "Зашифрован ли профиль."
          },
          "envRemark": {
            "type": [
              "string",
              "null"
            ],
            "description": "Примечание профиля.",
            "example": "Created through the Open API"
          },
          "uaVersion": {
            "type": "integer",
            "description": "Основная версия UA.",
            "example": 124
          },
          "browserCore": {
            "type": "integer",
            "description": "Основная версия ядра.",
            "example": 124
          },
          "accountInfo": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/AccountInfo"
              },
              {
                "type": "null"
              }
            ],
            "description": "Аккаунт платформы, привязанный к профилю. `null`, если он не настроен."
          },
          "isShowAccount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ToggleFlag"
              }
            ],
            "description": "Переключатель защиты паролем."
          },
          "afterStartupConfig": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/AfterStartupConfigDetail"
              },
              {
                "type": "null"
              }
            ],
            "description": "Поведение после запуска браузера."
          },
          "startupParams": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "--disable-notifications"
            ]
          },
          "cookies": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cookie в виде текста JSON.",
            "example": "[{\"name\":\"sid\",\"value\":\"abc\"}]"
          },
          "advancedSetting": {
            "$ref": "#/components/schemas/AdvancedSetting"
          }
        }
      },
      "ApiResponseBase": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "Return result code. `0` means success; other codes indicate exceptions.",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Error message. Usually `null` on success.",
            "example": null
          },
          "requestId": {
            "type": "string",
            "description": "Operation request ID. This field may be present when the request passes through the API gateway.",
            "example": "1d4f3ea968664593860b94b35d4ebf5e"
          }
        },
        "required": [
          "code",
          "msg"
        ]
      },
      "EnvironmentId": {
        "type": "string",
        "pattern": "^[1-9]\\d*$",
        "description": "Browser profile (environment) ID. Serialized as a decimal string to avoid JavaScript\nprecision loss on 64-bit integers.\n",
        "example": "1800000000000001"
      },
      "CloudBrowserStartRequest": {
        "type": "object",
        "properties": {
          "envId": {
            "$ref": "#/components/schemas/EnvironmentId"
          }
        },
        "required": [
          "envId"
        ]
      },
      "CloudBrowserStopRequest": {
        "type": "object",
        "properties": {
          "envId": {
            "$ref": "#/components/schemas/EnvironmentId"
          },
          "force": {
            "type": "boolean",
            "description": "Whether to forcibly release the cloud runtime. Only takes effect when the current run has\nan archive status of `FAILED`; in that case the archive step is skipped and runtime\nresources are reclaimed. Ignored in all other cases.\n",
            "default": false,
            "example": false
          }
        },
        "required": [
          "envId"
        ]
      },
      "CloudBrowserPageRequest": {
        "type": "object",
        "properties": {
          "uniqueIds": {
            "type": "array",
            "description": "Environment sequence numbers. Up to 100 items.",
            "maxItems": 100,
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "example": [
              1001,
              1002
            ]
          },
          "envId": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnvironmentId"
              }
            ],
            "description": "Environment ID. The request also accepts the field alias `id`."
          },
          "envName": {
            "type": "string",
            "description": "Environment name.",
            "example": "marketing-01"
          },
          "keyword": {
            "type": "string",
            "description": "Keyword filter. Matches environment name, group name, tag name, and remark.",
            "example": "marketing"
          },
          "groupId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Group ID. `0` means ungrouped.",
            "example": "0"
          },
          "pageNo": {
            "type": "integer",
            "format": "int64",
            "description": "Current page number, starting from 1. Default is 1.",
            "minimum": 1,
            "default": 1,
            "example": 1
          },
          "pageSize": {
            "type": "integer",
            "format": "int64",
            "description": "Number of items per page. Default is 10, maximum 100.",
            "minimum": 1,
            "maximum": 100,
            "default": 10,
            "example": 10
          }
        },
        "required": [
          "pageNo",
          "pageSize"
        ]
      },
      "CloudBrowserStatus": {
        "type": "string",
        "description": "Cloud runtime status:\n- `STARTING` — starting up\n- `RUNNING` — running and ready to connect\n- `CLOSED` — not started, closed, or failed to start\n",
        "enum": [
          "STARTING",
          "RUNNING",
          "CLOSED"
        ],
        "example": "RUNNING"
      },
      "CloudBrowserArchiveStatus": {
        "type": [
          "string",
          "null"
        ],
        "description": "Archive status of the current cloud run. `null` when there is no active run record:\n- `PENDING` — pending archive\n- `ARCHIVING` — archiving\n- `COMPLETED` — archive completed\n- `FAILED` — archive failed\n",
        "enum": [
          "PENDING",
          "ARCHIVING",
          "COMPLETED",
          "FAILED",
          null
        ],
        "example": null
      },
      "CloudBrowserPageItem": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/EnvironmentId"
          },
          "envName": {
            "type": "string",
            "description": "Environment name.",
            "example": "marketing-01"
          },
          "proxyId": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^\\d+$",
            "description": "Proxy ID currently bound to the profile. `null` when no proxy is configured.",
            "example": "1800000000000101"
          },
          "cloudBrowserStatus": {
            "$ref": "#/components/schemas/CloudBrowserStatus"
          },
          "cloudBrowserArchiveStatus": {
            "$ref": "#/components/schemas/CloudBrowserArchiveStatus"
          },
          "startDate": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
            "description": "Cloud runtime start time. `null` while starting, or when not started or closed.",
            "example": "2026-01-15 10:30:00"
          }
        },
        "required": [
          "id",
          "envName",
          "cloudBrowserStatus"
        ]
      },
      "CloudBrowserPageData": {
        "type": "object",
        "properties": {
          "total": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Total number of records.",
            "example": "42"
          },
          "current": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Current page number.",
            "example": "1"
          },
          "pages": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Total number of pages.",
            "example": "5"
          },
          "dataList": {
            "type": "array",
            "description": "Environments on the current page. Empty array when there are no results.",
            "items": {
              "$ref": "#/components/schemas/CloudBrowserPageItem"
            }
          }
        },
        "required": [
          "total",
          "current",
          "pages",
          "dataList"
        ]
      },
      "CloudBrowserConnectRequest": {
        "type": "object",
        "properties": {
          "envId": {
            "$ref": "#/components/schemas/EnvironmentId"
          }
        },
        "required": [
          "envId"
        ]
      },
      "CloudBrowserConnectResult": {
        "type": "object",
        "properties": {
          "cdpUrl": {
            "type": "string",
            "description": "Full CDP (Chrome DevTools Protocol) address including the access `token` parameter. Pass this\nURL to an automation framework such as Puppeteer, Playwright, or Selenium to attach to the\nremote browser.\n",
            "example": "https://runtime1.morelogin.com:16167?token=c62fedaaac524e41a0f02fc4345d41cb"
          },
          "accessUrl": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cloud browser page wrapper address. Open it in a browser to view and control the cloud\nbrowser desktop. `null` when the page wrapper is not configured.\n\nThe `token` parameter is a Base64-encoded payload carrying the desktop URL, desktop token,\nexpiry, and team, user, member, and environment IDs. The `envName` and `lang` parameters set\nthe displayed environment name and interface language.\n",
            "example": "https://official-website.morelogin.com/browser-remote?token=eyJkZXNrdG9wVXJsIjoi...ZW52SWQiOiIyMDczMzk1NDg5NzM4OTE5OTM2In0%3D&envName=P-1267&lang=en-US"
          }
        },
        "required": [
          "cdpUrl"
        ]
      }
    },
    "responses": {
      "VoidDataResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ApiResponseBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "null",
                      "example": null
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "BooleanDataResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ApiResponseBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "boolean",
                      "description": "Whether the batch operation succeeded.",
                      "example": true
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              ]
            }
          }
        }
      },
      "CloudBrowserPageResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ApiResponseBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/CloudBrowserPageData"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              ]
            }
          }
        }
      },
      "CloudBrowserConnectResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ApiResponseBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/CloudBrowserConnectResult"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "cdpUrl": "https://runtime1.morelogin.com:16167?token=c62fedaaac524e41a0f02fc4345d41cb",
                "accessUrl": "https://official-website.morelogin.com/browser-remote?token=eyJkZXNrdG9wVXJsIjoi...ZW52SWQiOiIyMDczMzk1NDg5NzM4OTE5OTM2In0%3D&envName=P-1267&lang=en-US"
              },
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      }
    }
  }
}